package com.cskaoyan.javase.array._1basic;

/**
 * 数组的基本使用
 * 注意：
 *      我们这里是直接在main方法/其它方法当中创建数组变量
 *      是创建的局部变量数组
 *      既然是局部变量,都需要先声明,再初始化
 *      才能够使用
 *
 * 1.(局部变量)数组的声明
 *      声明的目的是告诉编译器变量的类型和名字
 *      数组名也是变量名,小驼峰式书写,数组作为一个容器,往往存储很多数据
 *      所以数组名如果是名词的话,用复数形式.
 *
 *      (一维)数组的声明有两种方式:
 *      格式一:
 *          数据类型[] 数组名;
 *
 *      格式二:
 *          数据类型 数组名[];
 *          格式二是C语言风格的数组声明方式,建议Java程序不要使用,推荐使用格式一.
 *
 * 2.(局部变量)数组的初始化
 *      和局部变量的初始化是一样的,其实就是一个开辟空间赋值的过程.
 *      要想初始化数组,需要明确:
 *          1.数组的长度
 *          2.数组中每个存储单元存储的数据
 *
 *      (一维)数组的初始化有两种方式:
 *          数组的初始化过程中,需要使用new关键字.
 *
 *          1.静态初始化指的是：
 *          由程序员显式的，指定数组中每个元素的取值，数组的长度由系统决定（实际上也是由程序员给出的）
 *          和数组的声明写在一起，语法格式就是：
 *          数据类型[] 数组名 = new 数据类型[]{元素1,元素2,元素3...};
 *          静态初始化的简写形式:
 *          数据类型[] 数组名 = {元素1,元素2,元素3...};
 *          注意,简写形式必须和声明写在一起,不能直接用数组名赋值.
 *
 *          2.动态初始化
 *          程序员只是指定数组的长度,不给定具体元素的取值
 *          和数组的声明写在一起，语法格式就是：
 *              数据类型[] 数组名 = new 数据类型[数组长度];
 *
 *          注意事项：
 *          1.动态初始化没有给出具体元素的赋值，但仍然能够初始化完成，这是因为数组中的元素具有默认值。
 *          2.数组的长度必须是一个int范围内的非负数。
 *          3.动态初始化数组相对更灵活，是更常用的方式。
 *
 * 数组开辟存储空间，存储元素，开辟的是谁的空间？
 * 开辟的是内存空间，Java程序是运行在JVM上的，所以开辟的是JVM内存空间。
 *
 * @since 11:38
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        // 格式一声明int数组
        int[] arr;

        // 格式二声明String数组
        // C-style array declaration of local variable 'arr2'.
        String arr2[];

        // Variable 'arr' might not have been initialized
        // System.out.println(arr);

        System.out.println("-------------数组的初始化-----------------");

        // 静态初始化一个长度为0的int数组
        int[] arr3 = new int[]{};

        // 静态初始化一个char类型数组
        char[] arr4 = new char[]{'a', 120, 100, 'b'};

        // 静态初始化简写形式
        String[] arr5 = {"abc", "123"};

        // 简写形式必须和声明写在一起
        // arr5 = {};

        // 动态初始化一个int类型的数组
        int[] arr6 = new int[3];

        // 典型的错误“动静结合”
        // int[] arr7 = new int[3]{1,2,3};
    }
}
